home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / OCFINC.PAK / OCCTRL.H < prev    next >
C/C++ Source or Header  |  1997-05-06  |  15KB  |  450 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectComponents
  3. // Copyright (c) 1994, 1997 by Borland International, All Rights Reserved
  4. //
  5. // $Revision:   2.27  $
  6. //
  7. //  Definition of TOcControl class - Proxy object representing a control in
  8. //                                   an OCF container.
  9. //----------------------------------------------------------------------------
  10. #if !defined(OCF_OCCTRL_H)
  11. #define OCF_OCCTRL_H
  12.  
  13. #if !defined(OCF_OCVIEW_H)
  14. # include <ocf/ocview.h>
  15. #endif
  16. #if !defined(OCF_OCPART_H)
  17. # include <ocf/ocpart.h>
  18. #endif
  19. #if !defined(OCF_AUTOMACR_H)
  20. # include <ocf/automacr.h>
  21. #endif
  22.  
  23. // Check build target!
  24. //
  25. #if !defined(BI_PLAT_WIN32)
  26. # error OCCTRL.H can only be used when building WIN32 targets
  27. #endif
  28.  
  29. class _ICLASS ITypeInfo;
  30.  
  31. #if defined(BI_NAMESPACE)
  32. namespace OCF {
  33. #endif
  34.  
  35. class _ICLASS TOcControlEvent;
  36. class TAutoStack;
  37.  
  38. //
  39. //
  40. //
  41. class _OCFCLASS TEventEntry {
  42.   public:
  43.     TEventEntry();
  44.    ~TEventEntry();
  45.  
  46.     void      Init(int index, ITypeInfo* typeInfo);
  47.     void      Cleanup();
  48.  
  49.   protected:
  50.     DISPID    IDOfEvent;
  51.     uint      ParamCount;
  52.     BSTR*     NameAndParams;
  53. };
  54.  
  55. //
  56. //
  57. //
  58. class _OCFCLASS TEventList {
  59.   public:
  60.     TEventList(ITypeInfo* typeInfo);
  61.    ~TEventList();
  62.     TEventEntry&  operator[](int index);
  63.  
  64.     uint          GetCount() const    { return Count;    }
  65.     const GUID&   GetEventIID() const { return EventIID; }
  66.   protected:
  67.     TEventEntry*  EventList;
  68.     uint          Count;
  69.     GUID          EventIID;
  70. };
  71.  
  72.  
  73. //
  74. // class TOcControl
  75. // ~~~~~ ~~~~~~~~~~
  76. //
  77. // Class representing an embedded control within a document
  78. //
  79. class _ICLASS TOcControl : public TOcPart, protected IBControlSite {
  80.   public:
  81.     TOcControl(TOcDocument& document, int id=0, TOcControlEvent* pEv=NULL);
  82.     TOcControl(TOcDocument& document, const char far* name);
  83.  
  84.     // Overriden virtual of TOcPart
  85.     //
  86.     bool        Init(TOcInitInfo far* initInfo, TRect pos);
  87.  
  88.     // Define AddRef/Release/QI to avoid ambiguity
  89.     //
  90.     TUNKNOWN_STANDARD_IUNKNOWN_METHODS;
  91.  
  92.     // Retrieve interface/object
  93.     //
  94.     IBControl*  GetBControlI() {return BCtrlI;}
  95.     TOcView*    GetActiveControlView();
  96.  
  97.     ITypeInfo*  GetEventTypeInfo();
  98.     IDispatch*  GetCtlDispatch();
  99.  
  100.     // Flag accessor functions
  101.     //
  102.     void        SetDefault(bool def)
  103.                 {if (def) Flags |= OcxDefault; else Flags &= ~OcxDefault;}
  104.     void        SetCancel(bool cancel)
  105.                 {if (cancel) Flags |= OcxCancel; else Flags &= ~OcxCancel;}
  106.     void        SetUserName(TString& name);
  107.     uint        GetId() const { return CtlId; }
  108.     void        SetId(uint id){ CtlId = id;   }
  109.  
  110.     // Support for caching/looking of control's events
  111.     //
  112.     bool        FillEventList();
  113.     TEventList* GetEventList() const;
  114.  
  115.     // Access to Extended property support
  116.     //
  117.     bool       IsCancel()  const        {return (Flags & OcxCancel) != 0;}
  118.     bool       IsDefault() const        {return (Flags & OcxDefault)!= 0;}
  119.     long       GetLeft()                { return Pos.x; }
  120.     long       GetTop()                 { return Pos.y; }
  121.     long       GetWidth()               { return Size.cx; }
  122.     long       GetHeight()              { return Size.cy; }
  123.     void       SetLeft(long Value);
  124.     void       SetWidth(long Value);
  125.     void       SetTop(long Value);
  126.     void       SetHeight(long Value);
  127.     TString&   GetUserName();
  128.     IDispatch* GetParent();
  129.  
  130.     // Standard methods
  131.     //
  132.     HRESULT     Refresh()               { return GetBControlI()->Refresh(); };
  133.     HRESULT     DoClick()               { return GetBControlI()->DoClick(); };
  134.     HRESULT     AboutBox()              { return GetBControlI()->AboutBox(); };
  135.  
  136.   protected:
  137.    ~TOcControl();
  138.  
  139.     // Overriden virtual of TOcPart
  140.     //
  141.     bool InitObj (TOcInitInfo far* initInfo);
  142.  
  143.     // Helper to create served object (IDispatch*) of a class
  144.     //
  145.     TUnknown*   CreateAutoObject(const void* obj, TAutoClass& clsInfo);
  146.  
  147.     // TUnknown virtual overrides
  148.     //
  149.     HRESULT     QueryObject(const IID far& iid, void far* far* iface);
  150.  
  151.     IBControl         *BCtrlI;
  152.     TString           *pUserName;
  153.     TServedObject     *pIExtended;
  154.     TOcControlEvent   *pEvents;
  155.     uint               CtlId;
  156.     TEventList*        EventList;
  157.  
  158.     // IBControlSite implementation for BOle to use
  159.     //
  160.     HRESULT _IFUNC Init(UINT, IBControl*, UINT);
  161.     HRESULT _IFUNC OnPropertyChanged(DISPID dispid);
  162.     HRESULT _IFUNC OnPropertyRequestEdit(DISPID dispid);
  163.     HRESULT _IFUNC OnControlFocus(BOOL fGotFocus);
  164.     HRESULT _IFUNC TransformCoords(TPointL far* lpptlHimetric,
  165.                             TPointF far* lpptfContainer, DWORD flags);
  166.  
  167.     // TOcPart virtual routed to correct base (don't want other Init to hide)
  168.     //
  169.     HRESULT _IFUNC Init(IBDataProvider far* dp, IBPart far* p, LPCOLESTR s, BOOL b)
  170.                        {return TOcPart::Init(dp, p, s, b);}
  171.  
  172.     // Initialize the event IDispatch [Assumes pEvents is initialized]
  173.     //
  174.     void       SetEventDispatch();
  175.  
  176.   DECLARE_AUTOCLASS(TOcControl)
  177.     //
  178.     // Standard extended properties
  179.     //
  180.     AUTOPROP(Visible,     IsVisible,    SetVisible,     bool, )
  181.     AUTOPROP(Cancel,      IsCancel,     SetCancel,      bool, )
  182.     AUTOPROP(Default,     IsDefault,    SetDefault,     bool, )
  183.     AUTOPROP(Name,        GetUserName,  SetUserName,    TString, )
  184.     AUTOPROPRO(Parent,    GetParent,    IDispatch*,           )
  185.     AUTOPROP(Left,        GetLeft,      SetLeft,        long, )
  186.     AUTOPROP(Top,         GetTop,       SetTop,         long, )
  187.     AUTOPROP(Width,       GetWidth,     SetWidth,       long, )
  188.     AUTOPROP(Height,      GetHeight,    SetHeight,      long, )
  189.  
  190.   friend TOcControlEvent;
  191. };
  192.  
  193. //
  194. // class TOcControlEvent
  195. // ~~~~~ ~~~~~~~~~~~~~~~
  196. // OC Control Event class for standard control events
  197. //
  198. class _ICLASS TOcControlEvent : public TUnknown {
  199.   public:
  200.     TOcControlEvent();
  201.  
  202.     // Accessor to associated control object
  203.     //
  204.     TOcControl*   GetControl() {return pCtrl;}
  205.  
  206.   protected:
  207.    ~TOcControlEvent();
  208.  
  209.     virtual void  InitEventDispatch();
  210.     TUnknown*     CreateAutoObject(const void* obj, TAutoClass& clsInfo);
  211.  
  212.     // Standard events support
  213.     //
  214.     long          Click();
  215.     long          DblClick();
  216.     long          MouseDown(short Button, short Shift, long X, long Y);
  217.     long          MouseMove(short Button, short Shift, long X, long Y);
  218.     long          MouseUp  (short Button, short Shift, long X, long Y);
  219.     long          KeyDown  (short* KeyCode, short Shift);
  220.     long          KeyUp    (short* KeyCode, short Shift);
  221.     long          ErrorEvent(short number, TAutoString Description,
  222.                              SCODE SCode, TAutoString Source,
  223.                              TAutoString HelpFile,
  224.                              long helpContext, bool far* CancelDisplay);
  225.  
  226.     HRESULT       ForwardClickEvent(uint msg, DISPID id);
  227.     HRESULT       ForwardKeyEvent  (uint msg, DISPID id, short *KeyCode, short Shift);
  228.     HRESULT       ForwardMouseEvent(uint msg, DISPID id, short Button, short Shift,
  229.                                     long X, long Y);
  230.     HRESULT       CustomEvent(long *args);
  231.  
  232.   protected:
  233.     TOcControl    *pCtrl;
  234.     TServedObject *pIEvents;
  235.  
  236.   DECLARE_AUTOCLASS(TOcControlEvent)
  237.  
  238.     // Automation symbol table declaring methods handling standard events
  239.     //
  240.     AUTOFUNC0(Click,      Click,      long,)
  241.     AUTOFUNC0(DblClick,   DblClick,   long,)
  242.     AUTOFUNC4(MouseDown,  MouseDown,  long,  short,  short,  long,  long, )
  243.     AUTOFUNC4(MouseUp,    MouseUp,    long,  short,  short,  long,  long, )
  244.     AUTOFUNC4(MouseMove,  MouseMove,  long,  short,  short,  long,  long, )
  245.     AUTOFUNC2(KeyDown,    KeyDown,    long,  short*, short, )
  246.     AUTOFUNC2(KeyUp,      KeyUp,      long,  short*, short, )
  247.     AUTOFUNC7(ErrorEvent, ErrorEvent, long,
  248.                                       short         /* number       */,
  249.                                       TAutoString   /* Description  */,
  250.                                       long          /* SCode        */,
  251.                                       TAutoString   /* Source       */,
  252.                                       TAutoString   /* HelpFile     */,
  253.                                       long          /* helpContext  */,
  254.                                       bool*         /* CancelDisplay */, )
  255.     AUTOFUNCX(CustomEvent, CustomEvent, long, )
  256.  
  257.   friend TOcControl;
  258. };
  259.  
  260.  
  261. //
  262. // class TOcxView
  263. // ~~~~~ ~~~~~~~~
  264. // The TOcxView partner is a container (viewer) of a given (server/client)
  265. // document.
  266. //
  267. class _ICLASS TOcxView : public TOcView {
  268.   public:
  269.     TOcxView(TOcDocument& doc, TRegList* regList=0, IUnknown* outer=0);
  270.    ~TOcxView();
  271.  
  272.     HRESULT     QueryObject(const IID far& iid, void far* far* iface);
  273.  
  274.     // Ambient property support
  275.     //
  276.     void        SetBackColor(long Color);
  277.     void        SetForeColor(long Color);
  278.     void        SetLocaleID(long LocaleId);
  279.     void        SetMessageReflect(bool MsgRef);
  280.     void        SetTextAlign(short Align);
  281.     void        SetUserMode(bool Mode);
  282.     void        SetUIDead(bool Dead);
  283.     void        SetShowGrabHandles(bool Handles);
  284.     void        SetSupportsMnemonics(bool Mnem);
  285.     void        SetShowHatching(bool Hatch);
  286.     void        SetDisplayAsDefault(bool Disp);
  287.     void        SetDisplayName(TString& Name);
  288.     void        SetScaleUnits(TString& ScaleUnits);
  289.     void        SetFont(IDispatch *pFontDisp);
  290.  
  291.   protected:
  292.     long        GetBackColor();
  293.     long        GetForeColor();
  294.     long        GetLocaleID();
  295.     bool        GetMessageReflect();
  296.     short       GetTextAlign();
  297.     bool        GetUserMode();
  298.     bool        GetUIDead();
  299.     bool        GetShowGrabHandles();
  300.     bool        GetSupportsMnemonics();
  301.     bool        GetShowHatching();
  302.     bool        GetDisplayAsDefault();
  303.     TString&    GetDisplayName();
  304.     TString&    GetScaleUnits();
  305.     IDispatch*  GetFont();  // returns IFontDispatch
  306.  
  307.     void        SetAmbBackColor(long Color);
  308.     void        SetAmbForeColor(long Color);
  309.     void        SetAmbLocaleID(long LocaleId);
  310.     void        SetAmbMessageReflect(bool MsgRef);
  311.     void        SetAmbTextAlign(short Align);
  312.     void        SetAmbUserMode(bool Mode);
  313.     void        SetAmbUIDead(bool Dead);
  314.     void        SetAmbShowGrabHandles(bool Handles);
  315.     void        SetAmbSupportsMnemonics(bool Mnem);
  316.     void        SetAmbShowHatching(bool Hatch);
  317.     void        SetAmbDisplayAsDefault(bool Disp);
  318.     void        SetAmbDisplayName(TString& Name);
  319.     void        SetAmbScaleUnits(TString& ScaleUnits);
  320.     void        SetAmbFont(IDispatch *pFontDisp);
  321.  
  322.     void        AmbientChanged(DISPID dispid);
  323.     long        GetAmbientValue(long AmbientMsg, long Default);
  324.  
  325.   protected:
  326.     TServedObject *pIAmbients;
  327.     TString       *pBlankString;
  328.  
  329.   // Ambient properties
  330.   //
  331.   DECLARE_AUTOCLASS(TOcxView)
  332.     AUTOPROP(BackColor,        GetBackColor,      SetAmbBackColor,      long, )
  333.     AUTOPROP(ForeColor,        GetForeColor,      SetAmbForeColor,      long, )
  334.     AUTOPROP(LocaleID,         GetLocaleID,       SetAmbLocaleID,       long, )
  335.     AUTOPROP(MessageReflect,   GetMessageReflect, SetAmbMessageReflect, bool, )
  336.     AUTOPROP(TextAlign,        GetTextAlign,      SetAmbTextAlign,      short, )
  337.     AUTOPROP(UserMode,         GetUserMode,       SetAmbUserMode,       bool, )
  338.     AUTOPROP(UIDead,           GetUIDead,         SetAmbUIDead,         bool, )
  339.     AUTOPROP(ShowGrabHandles,  GetShowGrabHandles,SetAmbShowGrabHandles,bool, )
  340.     AUTOPROP(ShowHatching,     GetShowHatching,   SetAmbShowHatching,   bool, )
  341.     AUTOPROP(DisplayName,      GetDisplayName,    SetAmbDisplayName,    TString, )
  342.     AUTOPROP(ScaleUnits,       GetScaleUnits,     SetAmbScaleUnits,     TString, )
  343.     AUTOPROP(Font,             GetFont,           SetAmbFont,           IDispatch*, )
  344.     AUTOPROP(DisplayAsDefault, GetDisplayAsDefault, SetDisplayAsDefault,     bool, )
  345.     AUTOPROP(SupportsMnemonics,GetSupportsMnemonics,SetAmbSupportsMnemonics, bool, )
  346. };
  347.  
  348.  
  349. //
  350. // struct TCtrlEvent
  351. //
  352. // Base struct for all control event messages
  353. //
  354. struct TCtrlEvent {
  355.   TCtrlEvent(TOcControl* ctl, DISPID id) : Ctrl(ctl), DispId(id) {}
  356.  
  357.   TOcControl* Ctrl;       // Proxy object representing control
  358.   DISPID      DispId;
  359. };
  360.  
  361. struct TCtrlMouseEvent : public TCtrlEvent {
  362.   TCtrlMouseEvent(TOcControl* ctl, DISPID id, short butt, short shft, long x, long y) :
  363.                   TCtrlEvent(ctl, id), Button(butt), Shift(shft), X(x), Y(y)
  364.                   {}
  365.  
  366.   short Button;
  367.   short Shift;
  368.   long  X;
  369.   long  Y;
  370. };
  371.  
  372. struct TCtrlKeyEvent : public TCtrlEvent {
  373.   TCtrlKeyEvent(TOcControl* ctl, DISPID id, short kcode, short shft) : TCtrlEvent(ctl, id),
  374.                 KeyCode(kcode), Shift(shft)
  375.                 {}
  376.  
  377.   short KeyCode;
  378.   short Shift;
  379. };
  380.  
  381. struct TCtrlFocusEvent : public TCtrlEvent {
  382.   TCtrlFocusEvent(TOcControl* ctl, bool gotFocus)
  383.                 : TCtrlEvent(ctl, 0/*IId of Focus Event??*/),
  384.                   GotFocus(gotFocus){}
  385.  
  386.   bool GotFocus;
  387. };
  388.  
  389. struct TCtrlPropertyEvent : public TCtrlEvent {
  390.   TCtrlPropertyEvent(TOcControl* ctl, DISPID dispid, bool acpt = true) :
  391.           TCtrlEvent(ctl, dispid), accept(acpt)
  392.           {}
  393.  
  394.   bool    accept;
  395. };
  396.  
  397. struct TCtrlErrorEvent : public TCtrlEvent {
  398.  
  399.   TCtrlErrorEvent(TOcControl* ctl, short num, TAutoString desc,
  400.                   SCODE scode, TAutoString src, TAutoString hlpfile,
  401.                   long hlpCtx, bool xceldisplay) :
  402.                   TCtrlEvent(ctl, DISPID_ERROREVENT),
  403.                   Number(num), Description(desc), SCode(scode), Source(src),
  404.                   HelpFile(hlpfile), HelpContext(hlpCtx),
  405.                   CancelDisplay(xceldisplay)
  406.                   {}
  407.  
  408.   short       Number;
  409.   TAutoString Description;
  410.   SCODE       SCode;
  411.   TAutoString Source;
  412.   TAutoString HelpFile;
  413.   long        HelpContext;
  414.   bool        CancelDisplay;
  415. };
  416.  
  417. struct TCtrlCustomEvent : public TCtrlEvent {
  418.   TCtrlCustomEvent(TOcControl* ctl, DISPID id, TAutoStack* args) : TCtrlEvent(ctl, id),
  419.                     Args(args)
  420.                     {}
  421.   TAutoStack *Args;
  422. };
  423.  
  424. struct TCtrlTransformCoords : public TCtrlEvent {
  425.  
  426.   TCtrlTransformCoords(TOcControl* ctl, TPointL* him, TPointF* pcont,
  427.                        DWORD flgs) :
  428.                        TCtrlEvent(ctl, 0/*IID for this event??*/),
  429.                        lpptHimetric(him), lpptContainer(pcont), flags(flgs)
  430.                        {}
  431.  
  432.   TPointL    *lpptHimetric;
  433.   TPointF    *lpptContainer;
  434.   DWORD       flags;
  435. };
  436.  
  437.  
  438. //
  439. // Global functions to allow easy registration/unregistration of OCXes
  440. //
  441. HRESULT     OcRegisterControl(char* ocxPath);
  442. HRESULT     OcUnregisterControl(CLSID ClassId);
  443.  
  444. #if defined(BI_NAMESPACE)
  445. } // namespace OCF
  446. #endif
  447.  
  448. #endif
  449.  
  450.